package netty.demo_04_Buf;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;

/**
 * Netty - Buf 数据的写入和读取案例
 *
 * @author chenyuan
 * @date 2020/11/9 15:08
 */
public class ByteBuf01 {
	public static void main(String[] args) {
		// 创建一个 byteBuf
        /*
            说明
            1. 创建一个对象，该对象包含一个数组，是一个 byte[10]
            2. Netty 的 Buf 存取数据，不需要像 NIO 一样使用 Filp 切换
                Netty 底层维护了一个 ReaderIndex（下一个读的位置） 和 WriterIndex（下一个写的位置）
         */
		ByteBuf buffer = Unpooled.buffer(10);
		// 向 buf 存数据
		for (int i = 0; i < 10; i++) {
			buffer.writeByte(i);
		}
		System.out.println("写完数据后 {ReaderIndex: " + buffer.readerIndex() + ", WriterIndex: " + buffer.writerIndex() + "}");
		System.out.println("buf 的长度 - capacity ：" + buffer.capacity());
		// 输出
		for (int i = 0; i < buffer.capacity(); i++) {
			// 读数据的方式-1 ：直接 get 第几个 byte
			//System.out.println(buffer.getByte(i));
			// 读数据的方式-2 ：通过移动 ReaderIndex 遍历
			System.out.print(buffer.readByte() + "  ");
		}
		System.out.println();
		System.out.println("读完数据后 {ReaderIndex: " + buffer.readerIndex() + ", WriterIndex: " + buffer.writerIndex() + "}");
	}
}
